package lintulaskenta.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

/*
 * Havainnointitapahtuma on yhden vuoden laskenta yhdelle reitille, 
 * sillä on monta “pistevuotta”, eli tietyn pisteen tietyn vuoden laskentaa.
 */

@Entity
public class Havainnointitapahtuma implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long htId;
    @Column
    private int vuosi;
    @Column
    private int kuukausi;
    @Column
    private int paiva;
    @Column
    private int alkuTunnit;
    @Column
    private int alkuMinuutit;
    @Column
    private int loppuTunnit;
    @Column
    private int loppuMinuutit;
    @Column
    private String laskentakunta;
    @Column
    private String lahempiPaikka;
    @OneToMany(mappedBy = "havainnointitapahtuma")
    private List<Pistevuosi> pistevuodet = new ArrayList<Pistevuosi>();
    @Column
    private int havainnoijaNumero;
    @ManyToOne(cascade = CascadeType.MERGE)
    @JoinColumn
    private Reitti reitti;

    public Havainnointitapahtuma() {
    }

    public int getPisteidenLkm() {
        return pistevuodet.size();
    }
    
    public List<Pistevuosi> getPistevuodet() {
        return pistevuodet;
    }

    public void setPistevuodet(List<Pistevuosi> pistevuodet) {
        this.pistevuodet = pistevuodet;
    }

    public void addPistevuosi(Pistevuosi pv) {
        this.pistevuodet.add(pv);
    }

    public String getLahempiPaikka() {
        return lahempiPaikka;
    }

    public void setLahempiPaikka(String lahempiPaikka) {
        this.lahempiPaikka = lahempiPaikka;
    }

    public String getLaskentakunta() {
        return laskentakunta;
    }

    public void setLaskentakunta(String laskentakunta) {
        this.laskentakunta = laskentakunta;
    }

    public Havainnointitapahtuma(int havainnoijaNumero, Reitti reitti) {
        this.havainnoijaNumero = havainnoijaNumero;
        this.reitti = reitti;
    }

    public int getHavainnoijaNumero() {
        return havainnoijaNumero;
    }

    public void setHavainnoijaNumero(int havainnoijaNumero) {
        this.havainnoijaNumero = havainnoijaNumero;
    }

    public long getHtId() {
        return htId;
    }

    public Reitti getReitti() {
        return reitti;
    }

    public void setReitti(Reitti r) {
        if (r != null) {
            this.reitti = r;
            if (!r.getHavainnointitapahtumat().contains(this)) {
                r.getHavainnointitapahtumat().add(this);
            }
        }
    }

    public int getKuukausi() {
        return kuukausi;
    }

    public void setKuukausi(int kuukausi) {
        this.kuukausi = kuukausi;
    }

    public int getPaiva() {
        return paiva;
    }

    public void setPaiva(int paiva) {
        this.paiva = paiva;
    }

    public int getVuosi() {
        return vuosi;
    }

    public void setVuosi(int vuosi) {
        this.vuosi = vuosi;
    }

    public int getAlkuMinuutit() {
        return alkuMinuutit;
    }

    public void setAlkuMinuutit(int alkuMinuutit) {
        this.alkuMinuutit = alkuMinuutit;
    }

    public int getAlkuTunnit() {
        return alkuTunnit;
    }

    public void setAlkuTunnit(int alkuTunnit) {
        this.alkuTunnit = alkuTunnit;
    }

    public int getLoppuMinuutit() {
        return loppuMinuutit;
    }

    public void setLoppuMinuutit(int loppuMinuutit) {
        this.loppuMinuutit = loppuMinuutit;
    }

    public int getLoppuTunnit() {
        return loppuTunnit;
    }

    public void setLoppuTunnit(int loppuTunnit) {
        this.loppuTunnit = loppuTunnit;
    }
}
